#!/usr/bin/env python3
import os
from getpass import getpass
from datetime import datetime

# 确保项目路径、flask app 可以被导入
# 如果你的 app 在 app.py 中并创建了 `app`, db, Account，如你示例所示：
from app import app    # 或者 from myapp import app
from extensions import db
from data_models import Account

# 推荐使用 werkzeug 提供的安全哈希（pbkdf2:sha256）
from werkzeug.security import generate_password_hash

def main():
    with app.app_context():
        # 确保迁移已经执行、表已存在
        # 提示输入
        student_id = input("管理员学号(或用户名) student_id: ").strip()
        if not student_id:
            print("student_id 不能为空")
            return

        # 安全输入密码两次
        pw1 = getpass("密码: ")
        pw2 = getpass("确认密码: ")
        if pw1 != pw2:
            print("两次密码不一致，退出")
            return
        if len(pw1) < 6:
            print("密码长度建议 >= 6")
            return

        # 生成哈希
        pw_hash = generate_password_hash(pw1)  # 默认 method='pbkdf2:sha256'

        # 检查是否已存在
        existing = Account.query.filter_by(student_id=student_id).first()
        if existing:
            print("已存在同名账号，id:", existing.id, "role:", existing.role)
            confirm = input("是否要覆盖为管理员并更新密码？(y/N): ").lower()
            if confirm != 'y':
                print("取消")
                return
            existing.password_hash = pw_hash
            existing.role = "admin"
            db.session.commit()
            print("已更新原有账号为 admin 并更新密码")
            return

        # 创建新管理员
        admin = Account(
            student_id=student_id,
            password_hash=pw_hash,
            role="admin",
            created_at=datetime.utcnow()
        )
        db.session.add(admin)
        db.session.commit()
        print("管理员账号创建成功，id:", admin.id)

if __name__ == "__main__":
    main()